package com.swlz.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.swlz.commons.DBUtil;
import com.swlz.entity.WebFile;

import java.util.Date;
/**
 * <pre>
 * 数据访问对象
 * 网站文件
 * 用于上传文件的记录表
 * TableName : WEB_FILE
 * ClassName : com.swlz.dao.WebFileDAO
 * Author : swlz
 * E-Mail : 2233875735@qq.com
 * Date : 2020-06-23 11:03:59
 * Version : 1.0
 * Copyright 2020 swlz.top Inc. All rights reserved. 
 * Warning: this content is only for internal circulation of the company. It is forbidden to divulge it or use it for other commercial purposes
 * </pre>
 **/
public class WebFileDAO {

	/**
	 * 添加一个网站文件
	 * 用于上传文件的记录表
	 * 包含所有字段
	 * @param webFile - 实体对象
	 * @return - 影响行数
	 * @throws SQLException
	 */
	public int insert(WebFile webFile) throws SQLException {
		if(webFile.getFileId()==null) {
			webFile.setFileId(DBUtil.nextId());
		}
		return DBUtil.insert(webFile);
	}
 
	
	/**
	 * 添加一个网站文件
	 * 用于上传文件的记录表
	 * 只包含非null的字段
	 * @param webFile - 实体对象
	 * @return - 影响行数
	 * @throws SQLException
	 */
	public int insertSelective(WebFile webFile) throws SQLException {
		if(webFile.getFileId()==null) {
			webFile.setFileId(DBUtil.nextId());
		}
		return DBUtil.insertSelective(webFile);
	}
	

	/**
	 * 根据主键更新一个网站文件
	 * 用于上传文件的记录表
	 * 包含所有字段
	 * @param webFile - 实体对象
	 * @return - 影响行数
	 * @throws SQLException
	 */
	public int update(WebFile webFile) throws SQLException {
		return DBUtil.update(webFile);
	}
	
	/**
	 * 根据主键更新一个网站文件
	 * 用于上传文件的记录表
	 * 只包含非null的字段
	 * @param webFile - 实体对象
	 * @return - 影响行数
	 * @throws SQLException
	 */
	public int updateSelective(WebFile webFile) throws SQLException {
		return DBUtil.updateSelective(webFile);
	}
	
	/**
	 * 根据主键删除一个网站文件
	 * 用于上传文件的记录表
	 * @param fileId - 主键
	 * @return
	 * @throws SQLException
	 */
	public int deleteById(Long fileId) throws SQLException  {
		return DBUtil.execute("DELETE FROM WEB_FILE WHERE FILE_ID=?", fileId);
	}
	
	/**
	 * 根据主键获取一个网站文件
	 * 用于上传文件的记录表
	 * @param fileId - 主键
	 * @return
	 * @throws SQLException 没有获取到，或者获取多个都会抛出异常
	 */
	public WebFile selectById(Long fileId) throws SQLException  {
		return DBUtil.get("SELECT * FROM WEB_FILE WHERE FILE_ID=?", WebFile.class ,fileId);
	}

		
	/**
	 * 根据模型中的非空字段查询
	 * @param fileId - 实体对象
	 * @return
	 * @throws SQLException 没有获取到，或者获取多个都会抛出异常
	 */
	public WebFile selectByModel(WebFile webFile)throws SQLException {
		StringBuffer sql = new StringBuffer("SELECT * FROM WEB_FILE WHERE 1=1 ");
		List<Object> params = new ArrayList<Object>();
		where(webFile,sql,params);
		return DBUtil.get(sql.toString(), WebFile.class, params.toArray());
	}
	
	/**
	 * 根据模型中的非空字段查询
	 * @param fileId - 实体对象
	 * @param index - 开始索引
	 * @param len - 返回长度
	 * @return
	 * @throws SQLException
	 */
	public List<WebFile> selectByModel(WebFile webFile,int index,int len)throws SQLException {
		StringBuffer sql = new StringBuffer("SELECT * FROM WEB_FILE WHERE 1=1 ");
		List<Object> params = new ArrayList<Object>();
		where(webFile,sql,params);
		sql.append(" ORDER BY FILE_ID DESC LIMIT ?,?");
		params.add(index);
		params.add(len);
		return DBUtil.list(sql.toString(), WebFile.class, params.toArray());
	}

	/**
	 * 根据模型中的非空字段统计
	 * @param fileId - 实体对象
	 * @return
	 * @throws SQLException
	 */
	public long countByModel(WebFile webFile)throws SQLException {
		StringBuffer sql = new StringBuffer("SELECT count(*) as c FROM WEB_FILE WHERE 1=1 ");
		List<Object> params = new ArrayList<Object>();
		where(webFile,sql,params);
		return DBUtil.getLong(sql.toString(), params.toArray());
	}
	
	/**
	 * 格式化where条件和参数
	 * @param fileId - 实体对象
	 * @param sql - SQL语句
	 * @param params - SQL语句中的参数
	 */
	private void where(WebFile webFile,StringBuffer sql,List<Object> params) {
		if(webFile==null){
			return;
		}

		if(webFile.getFileId()!=null) {
			sql.append(" AND FILE_ID=?");
			params.add(webFile.getFileId());
		}

		if(webFile.getFileContentType()!=null) {
			sql.append(" AND FILE_CONTENT_TYPE=?");
			params.add(webFile.getFileContentType());
		}

		if(webFile.getFileName()!=null) {
			sql.append(" AND FILE_NAME=?");
			params.add(webFile.getFileName());
		}

		if(webFile.getFileUri()!=null) {
			sql.append(" AND FILE_URI=?");
			params.add(webFile.getFileUri());
		}

		if(webFile.getFileStatus()!=null) {
			sql.append(" AND FILE_STATUS=?");
			params.add(webFile.getFileStatus());
		}

	}
}